package com.nuoniu.sibanyun.service.crm.call;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.nuoniu.sibanyun.entity.crm.call.CrmCallAgent;
import com.nuoniu.sibanyun.entity.crm.call.CrmCallAppInfo;
import com.nuoniu.sibanyun.entity.crm.call.CrmCallTaskRecord;
import com.nuoniu.sibanyun.entity.crm.call.dto.CrmCallTaskRecordCallBackDto;
import com.nuoniu.sibanyun.entity.crm.call.dto.CrmCallTaskRecordSearchDto;
import com.nuoniu.sibanyun.entity.crm.call.dto.xiangyun.CallBackRecord;
import com.nuoniu.sibanyun.entity.crm.call.rongying.CallMode;
import com.nuoniu.sibanyun.entity.crm.call.rongying.RongYingCallResult;
import com.nuoniu.sibanyun.userThread.UserInfo;
import org.springframework.web.multipart.MultipartFile;

import javax.servlet.http.HttpServletRequest;
import java.util.List;

/**
 * <p>
 * 客户管理-外呼管理-外呼记录 服务类
 * </p>
 *
 * @author 白强
 * @since 2022-02-28
 */
public interface ICrmCallTaskRecordService extends IService<CrmCallTaskRecord> {
    /**
     * 通过 任务ID 查询通话 记录
     * @param taskId
     * @return
     */
    List<CrmCallTaskRecord> listByTaskId(Integer taskId);

    /**
     * 分页查询 记录
     * @param recordSearchDto
     * @return
     */
    Page<CrmCallTaskRecord> pageList(CrmCallTaskRecordSearchDto recordSearchDto);

    /**
     * 更新 通话记录 回调信息(亿维)
     * @param crmCallTaskRecordCallBackDto
     */
    void addCallBackInfo(CrmCallTaskRecordCallBackDto crmCallTaskRecordCallBackDto);

    /**
     *  上传 通话语音(亿维)
     * @param request
     * @param callId  通话ID
     * @param pid 企业pid
     * @param IMEI 设备序列号
     */
    void uploadAudio(HttpServletRequest request, String callId, String pid, String IMEI)throws Exception;

    /**
     * 通话话单推送(祥云)
     * @param callBackRecord
     */
    void callBackRecordFromXiangYun(CallBackRecord callBackRecord);

    /**
     * 更新 任务统计
     * @param crmCallTaskRecord
     * @param detailId
     * @param taskId
     */
    void updateTaskAndDetailStatistics(CrmCallTaskRecord crmCallTaskRecord,Long detailId,Integer taskId);

    /**
     * 计算话费、更新账单、余额不足校验
     * @param crmCallTaskRecord
     */
    void chargingAndBill(CrmCallTaskRecord crmCallTaskRecord);

    /**
     * 新增拨打记录（呼出时）
     * @param userInfo
     * @param myCrmCallAgent
     * @param callMode
     * @param rongYingCallResult
     */
    void addFromCallMode(UserInfo userInfo , CrmCallAgent myCrmCallAgent , CallMode callMode, RongYingCallResult rongYingCallResult);

    /**
     * 通过 callId 查询 通话记录
     * @param callId
     * @return
     */
    Long getByCallId(String callId);

    /**
     * 获取 未处理的 通话记录
     * @param talkId
     * @return
     */
    CrmCallTaskRecord getRecordByTalkId(String talkId);

    /**
     * 批量下载 远端 语音文件
     * @param crmCallTaskRecordList
     */
    void downAudioRemote(List<CrmCallTaskRecord> crmCallTaskRecordList);



}
